/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package espe.ccsoft.dao;

import espe.ccsoft.db.Conexion;
import espe.ccsoft.models.Chofer;
import espe.ccsoft.models.Socio;
import espe.ccsoft.orm.ORMBase;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Carlos
 */
public class ChoferDao extends ORMBase<Chofer> {

    private PreparedStatement ps = null;
    private FileInputStream fis = null;
    private final Conexion conexionDB = new Conexion();

    public final Chofer findByPK(final int id) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        super.findByPkSql = "select * FROM CHOFER"
                + " WHERE CHO_ID=?";
        return super.findByPK(new Object[]{
            id,});
    }

    public final Chofer findByRUC(final String ruc) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        super.findByPkSql = "select * FROM CHOFER"
                + " WHERE CHO_RUC=?";
        return super.findByPK(new Object[]{
            ruc,});
    }

    public final void insert(final Chofer chofer) throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:                   
        chofer.setEstado(true);
        chofer.setFecha_creacion(new java.sql.Timestamp(new java.util.Date().getTime()));  
        chofer.setFechaCaducaLicencia(new java.sql.Timestamp(chofer.getCaducaLicencia().getTime()));
        super.insertSql = "INSERT INTO CHOFER ("
                + "CHO_RUC,"
                + "CHO_NOMBRES,"
                + "CHO_APELLIDOS,"
                + "CHO_DIRECCION,"
                + "CHO_TELEFONO,"
                + "CHO_TIPOLICENCIA,"
                + "CHO_CADUCALICENCIA,"
                + "CHO_EMAIL,"
                + "CHO_FOTO,"
                + "CHO_FECHACREACION,"
                + "CHO_ESTADO"
                + ") VALUES(?,?,?,?,?,?,?,?,?,?,?)";
        super.insert(new Object[]{
            chofer.getRuc(),
            chofer.getNombres().toUpperCase(),
            chofer.getApellidos().toUpperCase(),
            chofer.getDireccion().toUpperCase(),
            chofer.getTelefono(),
            chofer.getTipoLicencia(),
            chofer.getFechaCaducaLicencia(),
            chofer.getEmail(),
            chofer.getFoto(),            
            chofer.getFecha_creacion(),
            chofer.isEstado(),});

        guardaImagen(chofer);
    }

    private void guardaImagen(Chofer chofer) throws SQLException, Exception {
        String insert = "update CHOFER SET cho_foto=? WHERE cho_ruc=?";
        try (Connection conn = conexionDB.conectar()) {
            try (PreparedStatement stmt = conn.prepareStatement(insert)) {

                if (chofer.getFile().getFileName().compareTo("") == 0) {
                    File file = new File(chofer.getRutaFoto());
                    fis = new FileInputStream(file);
                    stmt.setBinaryStream(1, fis);
                    stmt.setString(2, chofer.getRuc());
                } else {
                    InputStream is = chofer.getFile().getInputstream();
                    stmt.setBinaryStream(1, is);
                    stmt.setString(2, chofer.getRuc());
                }

                stmt.executeUpdate();
                conn.commit();
            }
            conexionDB.desconectar(conn);
        } catch (SQLException ex) {
            Logger.getLogger(ORMBase.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public final List<Chofer> findAll() throws SQLException, Exception {
        // Sentencia SQL para realizar la consulta a la BD:
        super.findAllSql = "SELECT * FROM chofer WHERE CHO_ESTADO=1";
        return super.findAll();
    }

    protected Chofer crearObjeto(ResultSet rs) throws SQLException {
        Chofer chofer  = new Chofer();
        chofer.setId(rs.getInt("CHO_ID"));
        chofer.setRuc(rs.getString("CHO_RUC"));
        chofer.setNombres(rs.getString("CHO_NOMBRES"));
        chofer.setApellidos(rs.getString("CHO_APELLIDOS"));
        chofer.setDireccion(rs.getString("CHO_DIRECCION"));
        chofer.setTelefono(rs.getString("CHO_TELEFONO"));
        chofer.setTipoLicencia(rs.getString("CHO_TIPOLICENCIA"));
        chofer.setCaducaLicencia(rs.getTimestamp("CHO_CADUCALICENCIA"));
        chofer.setTelefono(rs.getString("CHO_TELEFONO"));
        chofer.setEmail(rs.getString("CHO_EMAIL"));
        chofer.setFoto(rs.getBlob("CHO_FOTO"));
        chofer.setFecha_creacion(rs.getTimestamp("CHO_FECHACREACION"));
        chofer.setEstado(rs.getBoolean("CHO_ESTADO"));
        return chofer;
    }

    public void update(Chofer chofer) throws Exception {
        super.updateSql = "UPDATE CHOFER SET "
                + "CHO_NOMBRES=?, "
                + "CHO_APELLIDOS=?, "
                + "CHO_DIRECCION=?, "
                + "CHO_TELEFONO=?, "
                + "CHO_TIPOLICENCIA=?, "
                + "CHO_CADUCALICENCIA=?, "
                + "CHO_EMAIL=?, "                
                + "CHO_ESTADO=? "
                + "WHERE CHO_ID=?";
        super.update(new Object[]{
            chofer.getNombres(),
            chofer.getApellidos(),
            chofer.getDireccion(),
            chofer.getTelefono(),
            chofer.getTipoLicencia(),
            chofer.getCaducaLicencia(),
            chofer.getEmail(),
            chofer.isEstado(),
            chofer.getId(),});                
        
        if(chofer.getFile().getFileName().compareTo("")!=0)
            guardaImagen(chofer);
    }


}
